﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class Administracion : Form
    {
        public Administracion()
        {
            InitializeComponent();
        }

        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        IEnumerable<Trabajador> ListaTrabajador;
        IEnumerable<Nivel> ListaNivel;
        IEnumerable<Parvulo> ListaParvulo;
        IEnumerable<Consumo> ListaConsumos;
        IEnumerable<Recurso> ListaRecursos;
        Validacion v = new Validacion();
        Generador g = new Generador();

        int valnombre;
        int valapellidop;
        int valapellidom;
        int valcelu;
        int valrut;
        int valdireccioncalle;
        int valdireccionnro;
        int valdireccioncomuna;
        int valmail;
        int valcargo;
        int valcontraseña;

        int valnivel;
        int valeducadora;

        int codnivel;

        int valnombrerecurso;
        int valtiporecurso;


        private void LlenarTrabajadores()
        {
            dgv_Trabajadores.Rows.Clear();
            ListaTrabajador = BEDE.Trabajador.Where(a => a.cod_cargo != 0);
            foreach (Trabajador aux in ListaTrabajador)
            {
                Jerarquia aux2 = BEDE.Jerarquia.Single(a => a.id_jerarquia == aux.cod_cargo);
                dgv_Trabajadores.Rows.Add(aux.rut.ToString(), aux.nombre.ToString(), aux.edad.ToString(), aux.fono.ToString(), aux.direccion.ToString(), aux.email.ToString().ToLower(), aux2.nombre.ToString());
            }
        }

        private void LlenarNiveles()
        {
            dgv_Niveles.Rows.Clear();
            ListaNivel = BEDE.Nivel.OrderBy(a => a.cod_nivel);
            foreach (Nivel aux in ListaNivel)
            {
                dgv_Niveles.Rows.Add(aux.cod_nivel.ToString(), aux.nombre.ToString(), aux.año.ToString());
            }
        }

        private void LlenarConsumos()
        {
            ListaConsumos = BEDE.Consumo.OrderBy(c => c.cod_consumo);
            foreach (Consumo aux in ListaConsumos)
            {
                dgv_Consumos.Rows.Add(aux.cod_consumo.ToString(), aux.Trabajador.nombre.ToString().Replace("·", " "), aux.fecha.ToShortDateString(), aux.Recurso1.nombre.ToString(), aux.cant_recurso.ToString());
            }
        }

        private void LimpiarForm()
        {
            tbx_NombreTrabajador.Clear();
            tbx_ApellidoPaternoT.Clear();
            tbx_ApellidoMaternoT.Clear();
            tbx_CelularT.Clear();
            tbx_RutT.Clear();
            tbx_DigitoT.Clear();
            nud_AñosT.Value = 19;
            tbx_DireccionCalleT.Clear();
            tbx_DireccionNroT.Clear();
            tbx_DireccionComunaT.Clear();
            tbx_MailT.Clear();
            cbx_Jerarquia.SelectedIndex = -1;
            tbx_PassT.Clear();
        }
        private void ListaTrabajadores()
        {
            cbx_Educadoras.DataSource = BEDE.Trabajador.Where(a => a.cod_cargo == 3).OrderBy(a => a.nombre);
            cbx_Educadoras.DisplayMember = "nombre";
            cbx_Educadoras.ValueMember = "rut";
            cbx_Educadoras.SelectedIndex = -1;
        }

        private void VerContenidoTrabajadores()
        {
            if (dgv_Trabajadores.RowCount == 0)
            {
                btn_EliminarTrabajador.Enabled = false;
                btn_EditarNivel.Enabled = false;
            }
            else
            {
                btn_EliminarTrabajador.Enabled = true;
                btn_EditarNivel.Enabled = true;
            }
        }

        private void VerContenidoNiveles()
        {
            if (dgv_Niveles.RowCount == 0)
            {
                btn_EliminarNivel.Enabled = false;
                btn_EditarNivel.Enabled = false;
            }
            else
            {
                btn_EliminarNivel.Enabled = true;
                btn_EditarNivel.Enabled = true;
            }
        }

        private void LlenarExistencias()
        {
            dgv_Recursos.Rows.Clear();
            ListaRecursos = BEDE.Recurso.OrderBy(c => c.cod_recurso);
            foreach (Recurso aux in ListaRecursos)
            {
                string tipo = "";
                if (aux.tipo_recurso == 1) { tipo = "FUNJIBLE"; } else { if (aux.tipo_recurso == 2) { tipo = "DIDACTICO"; } }
                dgv_Recursos.Rows.Add(aux.cod_recurso.ToString(), aux.nombre.ToString(), tipo.ToString(), aux.cant_disponible.ToString());
            }
        }

        private void Administracion_Load(object sender, EventArgs e)
        {
            this.Location = new Point(0, 0);
            LlenarTrabajadores();
            btn_EliminarTrabajador.Enabled = false;
            btn_EditarTrabajador.Enabled = false;
            btn_GuardarCambios.Visible = false;
            btn_DescartarCambios.Visible = false;
            btn_ActualizarNivel.Visible = false;
            btn_DescartarCambiosNivel.Visible = false;
            VerContenidoTrabajadores();
            try
            {
                cbx_RecursoAñadir.DataSource = BEDE.Recurso.OrderBy(c => c.cod_recurso);
                cbx_RecursoAñadir.DisplayMember = "nombre";
                cbx_RecursoAñadir.ValueMember = "cod_recurso";
                cbx_RecursoAñadir.SelectedIndex = -1;
            }
            catch { }
            LlenarNiveles();
            LlenarConsumos();
            LlenarExistencias();
            cbx_Jerarquia.DataSource = BEDE.Jerarquia.Where(a => a.id_jerarquia > 0);
            cbx_Jerarquia.DisplayMember = "nombre";
            cbx_Jerarquia.ValueMember = "id_jerarquia";
            ListaTrabajadores();
            VerContenidoNiveles();
            cbx_Jerarquia.SelectedIndex = -1;
            tbx_AñoNivel.Text = DateTime.Now.Date.Year.ToString();
            ListaTrabajador = BEDE.Trabajador.OrderBy(c => c.rut);
            int cont = 0;
            int adm = 0;
            foreach (Trabajador aux in ListaTrabajador)
            {
                cont++;
                if (aux.cod_cargo == 1) { adm++; }
            }
            if (adm == 0) { MessageBox.Show("El sistema no registra ningun administrador. Es completamente necesario para el sistema que, al menos exista un administrador para gestion administrativa. Por favor proceseda a registrar un administrador.", "NO SE ENCONTRO UN ADMINISTRADOR.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }
            if (cont <= 2) { MessageBox.Show("El sistema no registra trabajadores efectivos para el jardin (Educadoras, administrativos, etc). Po favor proceda a registrar trabajadores para iniciar con el funcionamiento normal del sistema.", "NO SE ENCUENTRAN TRABAJADORES EFECTIVOS.", MessageBoxButtons.OK, MessageBoxIcon.Information); }
        }

        private void tbx_NombreTrabajador_Leave(object sender, EventArgs e)
        {
            tbx_NombreTrabajador.Text = tbx_NombreTrabajador.Text.Trim();
            valnombre = v.ValidarTextos(tbx_NombreTrabajador.Text);
            if (valnombre == 0) { errorProvider1.SetError(lbl_NombreT, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NombreT, ""); }
        }

        private void tbx_ApellidoMaternoT_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoMaternoT.Text = tbx_ApellidoMaternoT.Text.Trim();
            valapellidom = v.ValidarTextos(tbx_ApellidoMaternoT.Text);
            if (valapellidom == 0) { errorProvider1.SetError(lbl_ApellidoMaternoT, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoMaternoT, ""); }
        }

        private void tbx_CelularT_Leave(object sender, EventArgs e)
        {
            tbx_CelularT.Text = tbx_CelularT.Text.Trim();
            valcelu = v.ValidarFono(tbx_CelularT.Text);
            if (valcelu == 0) { errorProvider1.SetError(lbl_CelularT, "El número de celular ingresado no tiene el formato correcto.\n(un nro. de celular se compone de un prefijo 06, 07, 08 o 09, y 7 digutos enteros)."); }
            else { errorProvider1.SetError(lbl_CelularT, ""); }
        }

        private void tbx_DigitoT_Leave(object sender, EventArgs e)
        {
            tbx_RutT.Text = tbx_RutT.Text.Trim();
            tbx_DigitoT.Text = tbx_DigitoT.Text.Trim();
            valrut = v.ValidarRut(tbx_RutT.Text, tbx_DigitoT.Text);
            if (valrut == 0) { errorProvider1.SetError(lbl_RutT, "El RUT ingresado es invalido."); }
            else { errorProvider1.SetError(lbl_RutT, ""); }
        }

        private void tbx_DireccionCalleT_Leave(object sender, EventArgs e)
        {
            tbx_DireccionCalleT.Text = tbx_DireccionCalleT.Text.Trim();
            valdireccioncalle = v.ValidarTextos(tbx_DireccionCalleT.Text);
            if (valdireccioncalle == 0) { errorProvider1.SetError(lbl_DomicilioCalleT, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_DomicilioCalleT, ""); }
        }

        private void tbx_DireccionNroT_Leave(object sender, EventArgs e)
        {
            tbx_DireccionNroT.Text = tbx_DireccionNroT.Text.Trim();
            valdireccionnro = v.ValidarNumeros(tbx_DireccionNroT.Text);
            if (valdireccionnro == 0) { errorProvider1.SetError(lbl_NumeroT, "Este campo solo puede contener valores numericos enteros.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NumeroT, ""); }
        }

        private void tbx_DireccionComunaT_Leave(object sender, EventArgs e)
        {
            tbx_DireccionComunaT.Text = tbx_DireccionComunaT.Text.Trim();
            valdireccioncomuna = v.ValidarTextos(tbx_DireccionComunaT.Text);
            if (valdireccioncalle == 0) { errorProvider1.SetError(lbl_ComunaT, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ComunaT, ""); }
        }

        private void tbx_MailT_Leave(object sender, EventArgs e)
        {
            tbx_MailT.Text = tbx_MailT.Text.Trim();
            valmail = v.ValidarMail(tbx_MailT.Text);
            if (valmail == 0) { errorProvider1.SetError(lbl_MailT, "El correo electrónico ingresado es incorrecto.\n(no tiene la estructura estándar de un correo electrónico).\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_MailT, ""); }
        }

        private void cbx_Jerarquia_Leave(object sender, EventArgs e)
        {
            valcargo = v.ValidarCombobox(cbx_Jerarquia.Text);
            if (valcargo == 0) { errorProvider1.SetError(lbl_CargoT, "No seleccionó un nivel jerarquico o cargo."); }
            else { errorProvider1.SetError(lbl_CargoT, ""); }
        }

        private void tbx_PassT_Leave(object sender, EventArgs e)
        {
            tbx_PassT.Text = tbx_PassT.Text.Trim();
            tbx_PassT.Text.Replace(" ", "");
            valcontraseña = v.ValidarContraseña(tbx_PassT.Text);
            if (valcontraseña == 0) { errorProvider1.SetError(lbl_passT, "La constraseña que intenta asociar, es incorrecta.\n * La contraseña debe tener minimo 4 caracteres.\n * La contraseña solo puede contener caracteres de la A a la Z, y de 0 a 9."); }
            else { errorProvider1.SetError(lbl_passT, ""); }
        }

        private void tbx_ApellidoPaternoT_Leave(object sender, EventArgs e)
        {
            tbx_ApellidoPaternoT.Text = tbx_ApellidoPaternoT.Text.Trim();
            valapellidop = v.ValidarTextos(tbx_ApellidoPaternoT.Text);
            if (valapellidop == 0) { errorProvider1.SetError(lbl_ApellidoPaternoT, "Este campo solo puede contener letras de la A a la Z y espacios.\nEste campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_ApellidoPaternoT, ""); }
        }

        private void btn_GuardarTrabajador_Click(object sender, EventArgs e)
        {
            tbx_NombreTrabajador.Focus();
            tbx_ApellidoPaternoT.Focus();
            tbx_ApellidoMaternoT.Focus();
            tbx_DigitoT.Focus();
            tbx_DireccionCalleT.Focus();
            tbx_DireccionNroT.Focus();
            tbx_DireccionComunaT.Focus();
            tbx_MailT.Focus();
            cbx_Jerarquia.Focus();
            tbx_PassT.Focus();
            btn_GuardarTrabajador.Focus();

            int valdatos = valnombre * valapellidop * valapellidom * valcelu * valrut * valdireccioncalle * valdireccionnro * valdireccioncomuna * valmail * valcargo * valcontraseña;

            if (valdatos == 0)
            {
                MessageBox.Show("No se puede almacenar el registro, pues existen datos erroneos.\nPor favor revise los campos señalados.", "ERROR AL GUARDAR REGISTRO.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                int valtrabajador = v.ComprobarTrabajador(tbx_RutT.Text);
                if (valtrabajador == 0)
                {
                    MessageBox.Show("Ya existe un trabajador registrado con el Rut que se ha indicado.", "ERROR AL GUARDAR REGISTRO.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else 
                {
                    Trabajador T = new Trabajador();
                    T.nombre = tbx_NombreTrabajador.Text.Replace(" ", "·") + " " + tbx_ApellidoPaternoT.Text.Replace(" ", "·") + " " + tbx_ApellidoMaternoT.Text.Replace(" ", "·");
                    T.fono = int.Parse(tbx_CelularT.Text.ToString());
                    T.rut = int.Parse(tbx_RutT.Text.ToString());
                    T.edad = int.Parse(nud_AñosT.Value.ToString());
                    T.direccion = tbx_DireccionCalleT.Text + " #" + tbx_DireccionNroT.Text + ", " + tbx_DireccionComunaT.Text;
                    T.email = tbx_MailT.Text;
                    T.cod_cargo = int.Parse(cbx_Jerarquia.SelectedValue.ToString());
                    T.clave = tbx_PassT.Text.ToString();
                    BEDE.Trabajador.AddObject(T);
                    BEDE.SaveChanges();
                    LimpiarForm();
                    LlenarTrabajadores();
                    ListaTrabajadores();
                    VerContenidoTrabajadores();
                    MessageBox.Show("El registro se almaceno correctamente.", "REGISTRO GUARDADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void cbx_Nivel_Leave(object sender, EventArgs e)
        {
            valnivel = v.ValidarCombobox(cbx_Nivel.Text);
            if (valnivel == 0) { errorProvider1.SetError(lbl_Nivel, "Debe seleccionar un nivel por crear."); }
            else { errorProvider1.SetError(lbl_Nivel, ""); }
        }

        private void cbx_Educadoras_Leave(object sender, EventArgs e)
        {
            valeducadora = v.ValidarCombobox(cbx_Educadoras.Text);
            if (valeducadora == 0) { errorProvider1.SetError(lbl_Educadora, "Debe asignar una educadora responsable del nivel."); }
            else { errorProvider1.SetError(lbl_Educadora, ""); }
        }

        private void btn_CrearNivel_Click(object sender, EventArgs e)
        {
            cbx_Nivel.Focus();
            cbx_Educadoras.Focus();
            btn_CrearNivel.Focus();

            int valdatosnivel = valeducadora * valnivel;
            if (valdatosnivel == 0)
            {
                MessageBox.Show("No se puede crear un nuevo nivel, pues faltan datos para su creación.\nRevise los campos señalados.", "ERROR AL CREAR NIVEL.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                int cod_nivel = (int.Parse(tbx_AñoNivel.Text.ToString()) * 100) + int.Parse(cbx_Nivel.SelectedIndex.ToString()) + 1;
                int valnivelexiste = v.ComprobarNivel(cod_nivel);
                if (valnivelexiste == 0) { MessageBox.Show("El nivel que intenta crear ya existe.\n(revise en la lista de niveles).", "ERROR AL CREAR NIVEL", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                else
                {
                    Nivel N = new Nivel();
                    N.cod_nivel = cod_nivel;
                    N.año = DateTime.Now.Year;
                    N.nombre = cbx_Nivel.Text + " " + DateTime.Now.Year.ToString();
                    N.rut_trabajador = int.Parse(cbx_Educadoras.SelectedValue.ToString());
                    BEDE.Nivel.AddObject(N);
                    BEDE.SaveChanges();
                    cbx_Educadoras.SelectedIndex = -1;
                    cbx_Nivel.SelectedIndex = -1;
                    LlenarNiveles();
                    MessageBox.Show("El nivel fue creado exitosamente.", "NIVEL CREADO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btn_LimpiarLista_Click(object sender, EventArgs e)
        {
            dgv_ListaNivel.Rows.Clear();
        }

        private void btn_EliminarNivel_Click(object sender, EventArgs e)
        {
            int a = int.Parse(dgv_Niveles.CurrentRow.Cells[0].Value.ToString());
            int valeliminarnivel = v.EliminarNivel(a);
            if (valeliminarnivel == 0)
            {
                if (MessageBox.Show("El nivel que está intentando eliminar tiene parvulos asociados.\n¿Desea continuar con la eliminacion?.", "ELIMINAR NIVEL.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (MessageBox.Show("¿Está absolutamente seguro que desea eliminar el nivel seleccionado?\n   >> si presiona SI, se eliminará el nivel, y todas las fichas de parvulos a él asociadas.\n   >> Si presiona NO, se cancelará la eliminación.", "CORROBORE ELIMINACIÓN.", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                    {
                        ListaParvulo = BEDE.Parvulo.Where(C => C.cod_nivel == a).OrderBy(C => C.rut_niño);
                        foreach (Parvulo aux in ListaParvulo)
                        {
                            BEDE.Parvulo.DeleteObject(aux);
                        }
                        Nivel X = BEDE.Nivel.Where(c => c.cod_nivel == a).First();
                        BEDE.Nivel.DeleteObject(X);
                        BEDE.SaveChanges();
                        LlenarNiveles();
                        MessageBox.Show("Tanto el nivel, como las fichas asociadas a éste han sido\ncorrectamente eliminados.", "REGISTROS ELIMINADOS.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        
                    }
                }
            }
            else
            {
                if (MessageBox.Show("¿Está seguro que desea eliminar el nivel seleccionado?", "ELIMINAR NIVEL", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Nivel X = BEDE.Nivel.Where(c => c.cod_nivel == a).First();
                    BEDE.Nivel.DeleteObject(X);
                    BEDE.SaveChanges();
                    LlenarNiveles();
                    MessageBox.Show("El nivel seleccionado ha sido correctamente eliminado.", "REGISTROS ELIMINADOS.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

            }
        }

        private void btn_VerLista_Click(object sender, EventArgs e)
        {
            dgv_ListaNivel.Rows.Clear();
            int a = int.Parse(dgv_Niveles.CurrentRow.Cells[0].Value.ToString());
            ListaParvulo = BEDE.Parvulo.Where(c => c.cod_nivel == a).OrderBy(c => c.rut_niño);
            foreach (Parvulo aux in ListaParvulo)
            {
                dgv_ListaNivel.Rows.Add(aux.rut_niño.ToString(), aux.nombre.ToString(), aux.fecha_nacimiento.ToShortDateString(), aux.fecha_matricula.ToShortDateString());
            }
            if (dgv_ListaNivel.RowCount == 0) { MessageBox.Show("El nivel seleccionado no tiene niños inscritos aún.", "NIVEL VACÍO.", MessageBoxButtons.OK, MessageBoxIcon.Information); }
        }

        private void btn_EliminarTrabajador_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Está seguro que desea eliminar el trabajador indicado?", "ELIMINAR REGISTRO.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                int a = int.Parse(dgv_Trabajadores.CurrentRow.Cells[0].Value.ToString());
                int tienenivel = v.ComprobarEliminacionTrabajador(a);
                if (tienenivel == 0)
                {
                    MessageBox.Show("El trabajador seleccionado aun no se puede eliminar, pues tiene niveles a su cargo.", "EL TRABAJADOR NO PUEDE SER ELIMINADO AUN.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                else
                {
                    Trabajador X = BEDE.Trabajador.Where(c => c.rut == a).First();
                    BEDE.Trabajador.DeleteObject(X);
                    BEDE.SaveChanges();
                    LlenarTrabajadores();
                    VerContenidoTrabajadores();
                    MessageBox.Show("Trabajador Correctamente eliminado", "REGISTRO ELIMINADO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void Niveles_Enter(object sender, EventArgs e)
        {
            ListaTrabajador = BEDE.Trabajador.Where(c => c.cod_cargo == 3);
            int cont = 0;
            foreach (Trabajador aux in ListaTrabajador)
            {
                cont++;
            }
            if (cont == 0) { MessageBox.Show("No puede gestionar niveles aun, pues aun no tiene ninguna educadora  registrada.\nProceda a registrar educadoras para poder crear niveles.", "AUN NO PUEDE CREAR NIVELES.", MessageBoxButtons.OK, MessageBoxIcon.Error); tab_Administracion.SelectTab("Trabajadores"); }
        }

        private void dgv_Trabajadores_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            btn_EditarTrabajador.Enabled = true;
            btn_EliminarTrabajador.Enabled = true;
        }

        private void btn_EditarTrabajador_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            int a = int.Parse(dgv_Trabajadores.CurrentRow.Cells[0].Value.ToString());
            Trabajador aux = BEDE.Trabajador.Single(c => c.rut == a);
            string[] nombre = aux.nombre.Split(' ');
            string[] datos = aux.nombre.Split(' ');
            tbx_ApellidoMaternoT.Text = datos[2].ToString().Replace("·"," ");
            tbx_ApellidoPaternoT.Text = datos[1].ToString().Replace("·"," ");
            tbx_NombreTrabajador.Text = datos[0].ToString().Replace("·"," ");
            tbx_CelularT.Text = aux.fono.ToString();
            tbx_RutT.Text = aux.rut.ToString();
            tbx_RutT.Enabled = false;
            tbx_DigitoT.Enabled = false;
            nud_AñosT.Value = aux.edad;
            string[] domicilio = aux.direccion.Split('#',',');
            int d = 0;
            foreach (string algo2 in domicilio)
            {
                if (d == 2) { tbx_DireccionComunaT.Text = algo2.ToString().Trim(); }
                if (d == 1) { tbx_DireccionNroT.Text = algo2.ToString().Trim(); d++; }
                if (d == 0) { tbx_DireccionCalleT.Text = algo2.ToString().Trim(); d++; }
            }
            tbx_MailT.Text = aux.email.ToString();
            cbx_Jerarquia.SelectedIndex = aux.cod_cargo - 1;
            tbx_PassT.Text = aux.clave.ToString();
            btn_GuardarTrabajador.Visible = false;
            btn_GuardarCambios.Visible = true;
            btn_DescartarCambios.Visible = true;
        }

        private void btn_DescartarCambios_Click(object sender, EventArgs e)
        {
            tbx_NombreTrabajador.Clear();
            tbx_ApellidoPaternoT.Clear();
            tbx_ApellidoMaternoT.Clear();
            tbx_RutT.Enabled = true;
            tbx_RutT.Clear();
            tbx_DigitoT.Enabled = true;
            tbx_DigitoT.Clear();
            nud_AñosT.Value = 19;
            tbx_DireccionCalleT.Clear();
            tbx_DireccionNroT.Clear();
            tbx_CelularT.Clear();
            tbx_DireccionComunaT.Clear();
            tbx_MailT.Clear();
            cbx_Jerarquia.SelectedIndex = -1;
            tbx_PassT.Clear();
            btn_GuardarCambios.Visible = false;
            btn_DescartarCambios.Visible = false;
            btn_GuardarTrabajador.Visible = true;
        }

        private void btn_GuardarCambios_Click(object sender, EventArgs e)
        {
                tbx_NombreTrabajador.Focus();
                tbx_ApellidoPaternoT.Focus();
                tbx_ApellidoMaternoT.Focus();
                tbx_CelularT.Focus();
                tbx_DireccionCalleT.Focus();
                tbx_DireccionNroT.Focus();
                tbx_DireccionComunaT.Focus();
                tbx_MailT.Focus();
                cbx_Jerarquia.Focus();
                tbx_PassT.Focus();
                btn_GuardarCambios.Focus();

                int valdatos = valnombre * valapellidop * valapellidom * valcelu * valdireccioncalle * valdireccionnro * valdireccioncomuna * valmail * valcargo * valcontraseña;
                if (valdatos == 0)
                {
                    MessageBox.Show("No se pueden realizar los cambios, pues los datos ingresados son erroneos. Revise los campos señalados, y vuelva a intentarlo.", "ERROR DE DATOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    string Mensaje = "valnombre = " + valnombre.ToString() + "\nvalapellidop = " + valapellidop.ToString() + "\nvalapellidom = " + valapellidom.ToString() + "\nvalcelu = " + valcelu.ToString() + "\nvaldireccioncalle = " + valdireccioncalle.ToString() + "\nvaldireccionnro = " + valdireccionnro.ToString() + "\nvaldireccioncomuna = " + valdireccioncomuna.ToString() + "\nvalmail = " + valmail.ToString() + "\nvalcargo = " + valcargo.ToString() + "\nvalcontraseña = " + valcontraseña.ToString();
                    MessageBox.Show(Mensaje, "datos", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    if (MessageBox.Show("¿Esta seguro que desea guardar los cambios realizados?", "GUARDAR CAMBIOS.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        int a = int.Parse(tbx_RutT.Text.ToString());
                        Trabajador T = BEDE.Trabajador.Single(c => c.rut == a);
                        T.nombre = tbx_NombreTrabajador.Text.Replace(" ", "·") + " " + tbx_ApellidoPaternoT.Text.Replace(" ", "·") + " " + tbx_ApellidoMaternoT.Text.Replace(" ", "·");
                        T.fono = int.Parse(tbx_CelularT.Text.ToString());
                        T.edad = int.Parse(nud_AñosT.Value.ToString());
                        T.direccion = tbx_DireccionCalleT.Text + " #" + tbx_DireccionNroT.Text + ", " + tbx_DireccionComunaT.Text;
                        T.email = tbx_MailT.Text;
                        T.cod_cargo = int.Parse(cbx_Jerarquia.SelectedValue.ToString());
                        T.clave = tbx_PassT.Text.ToString();
                        BEDE.AcceptAllChanges();
                        BEDE.SaveChanges();
                        LimpiarForm();
                        LlenarTrabajadores();
                        ListaTrabajadores();
                        btn_GuardarCambios.Visible = false;
                        btn_DescartarCambios.Visible = false;
                        btn_GuardarTrabajador.Visible = true;
                        MessageBox.Show("Los cambios indicados fueron realizados correctamente. La información en la base de datos se encuentra actualizada.", "CAMBIOS REALIZADOS.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
        }

        private void btn_EditarNivel_Click(object sender, EventArgs e)
        {
            int a = int.Parse(dgv_Niveles.CurrentRow.Cells[0].Value.ToString());
            Nivel aux = BEDE.Nivel.Single(c => c.cod_nivel == a);
            codnivel = aux.cod_nivel;
            cbx_Nivel.SelectedIndex = (codnivel % 10) - 1;
            cbx_Educadoras.Text = aux.Trabajador.nombre.ToString();
            tbx_AñoNivel.Text = aux.año.ToString();
            cbx_Nivel.Enabled = false;
            btn_ActualizarNivel.Visible = true;
            btn_CrearNivel.Visible = false;
            btn_DescartarCambiosNivel.Visible = true;
        }

        private void btn_DescartarCambiosNivel_Click(object sender, EventArgs e)
        {
            cbx_Nivel.Enabled = true;
            cbx_Nivel.SelectedIndex = -1;
            tbx_AñoNivel.Text = DateTime.Now.Year.ToString();
            cbx_Educadoras.SelectedIndex = -1;
            btn_ActualizarNivel.Visible = false;
            btn_CrearNivel.Visible = true;
            btn_GuardarCambios.Visible = false;
            btn_DescartarCambiosNivel.Visible = false;
        }

        private void btn_ActualizarNivel_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea guardar los cambios?", "GUARDAR CAMBIOS.", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Nivel N = BEDE.Nivel.Single(c => c.cod_nivel == codnivel);
                int rut = int.Parse(cbx_Educadoras.SelectedValue.ToString());
                Trabajador t = BEDE.Trabajador.Single(tt => tt.rut == rut);
                N.Trabajador = t;
                BEDE.SaveChanges();
                cbx_Educadoras.SelectedIndex = -1;
                cbx_Nivel.SelectedIndex = -1;
                LlenarNiveles();
                btn_DescartarCambiosNivel.Visible = false;
                btn_ActualizarNivel.Visible = false;
                btn_CrearNivel.Visible = true;
                MessageBox.Show("Los cambios se realizaron exitosamente. La información ya esta actualizada en la base de datos.", "NIVEL CREADO", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void dgv_Consumos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int a = int.Parse(dgv_Consumos.CurrentRow.Cells[0].Value.ToString());
            Consumo aux = BEDE.Consumo.Single(c => c.cod_consumo == a);
            tbx_Observacion.Text = aux.observacion.ToString();
        }

        private void btn_AñadirRecursos_Click(object sender, EventArgs e)
        {
            cbx_Tipo.Focus();
            cbx_RecursoAñadir.Focus();
            btn_AñadirRecursos.Focus();
            //errorProvider1.SetError(lbl_Trabajador, "");
            //errorProvider1.SetError(lbl_Rec, "");
            int valido = valnombrerecurso * valtiporecurso;
            if (valido == 0) { MessageBox.Show("No se ha podido agregar el recurso descrito, pues se ingresaron datos erroneos. Revise y corrija los campos señalados, y vuelva a intentarlo.", "ERROR DE DATOS", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            else
            {
                try
                {
                    int r = int.Parse(cbx_RecursoAñadir.SelectedValue.ToString());
                    Recurso aux = BEDE.Recurso.Single(c => c.cod_recurso == r);
                    aux.cant_disponible += int.Parse(Nud_CantidadAñadir.Value.ToString());
                    BEDE.SaveChanges();
                    LlenarExistencias();
                    cbx_Tipo.SelectedIndex = -1;
                    cbx_RecursoAñadir.SelectedIndex = -1;
                    Nud_CantidadAñadir.Value = 1;
                    MessageBox.Show("Las unidades del recurso indicado se añadieron correctamente al stock.", "UNIDADES AÑADIDAS.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                catch
                {
                    Recurso RR = new Recurso();
                    int a = g.GenCodRecurso();
                    RR.cod_recurso = a;
                    RR.tipo_recurso = cbx_Tipo.SelectedIndex + 1;
                    RR.nombre = cbx_RecursoAñadir.Text;
                    RR.cant_disponible = int.Parse(Nud_CantidadAñadir.Value.ToString());
                    BEDE.Recurso.AddObject(RR);
                    BEDE.SaveChanges();
                    LlenarExistencias();
                    cbx_Tipo.SelectedIndex = -1;
                    cbx_RecursoAñadir.SelectedIndex = -1;
                    Nud_CantidadAñadir.Value = 1;
                    MessageBox.Show("El recurso descrito fue correctamente añadido a las existencias.", "RECURSO AÑADIDO.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                LlenarExistencias();
            }
        }

        private void cbx_Tipo_Leave(object sender, EventArgs e)
        {
            valtiporecurso = v.ValidarCombobox(cbx_Tipo.Text);
            if (valtiporecurso == 0) { errorProvider1.SetError(lbl_Tipo, "Debe escoger un tipo de recurso."); }
            else { errorProvider1.SetError(lbl_Tipo, ""); }
        }

        private void cbx_RecursoAñadir_Leave(object sender, EventArgs e)
        {
            cbx_RecursoAñadir.Text = cbx_RecursoAñadir.Text.Trim();
            string a = cbx_RecursoAñadir.Text.ToUpper();
            cbx_RecursoAñadir.Text = a;
            valnombrerecurso = v.ValidarTextos(cbx_RecursoAñadir.Text);
            if (valnombrerecurso == 0) { errorProvider1.SetError(lbl_NomRecurso, "Este campo solo admite caracteres entre la A y la Z, además de espacios.\nEste Campo no puede quedar vacío."); }
            else { errorProvider1.SetError(lbl_NomRecurso, ""); }
        }
    }
}